package onjava.generics;

// generics/Fibonacci.java
// (c)2021 MindView LLC: see Copyright.txt
// We make no guarantees that this code is fit for any purpose.
// Visit http://OnJava8.com for more book information.
// Generate a Fibonacci sequence
import java.util.function.*;
import java.util.stream.*;

/**
 * 泛型接口 ->生成器
 * 斐波那契数列
 *
 * @author Lucky Yang
 */
public class Fibonacci implements Supplier<Integer> {
  private int count = 0;

  @Override
  public Integer get() {
    return fib(count++);
  }

  private int fib(int n) {
    int min = 2;
    if (n < min) {
      return 1;
    }
    return fib(n - 2) + fib(n - 1);
  }

  public static void main(String[] args) {
    Stream.generate(new Fibonacci())
        .limit(18)
        .map(n -> n + " ")
        .forEach(System.out::print);
  }
}
/*
 * Output:
 * 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
 * 2584
 */
